package net.yla.smartbus.core.util;//package net.seocoo.smartbus.core.util;
//
//import com.vip.vjtools.vjkit.number.RandomUtil;
//import net.seocoo.smartbus.core.wechat.Oauth2Util;
//import net.seocoo.smartbus.core.wechat.WeixinOauth2Token;
//import org.dom4j.Document;
//import org.dom4j.DocumentException;
//import org.dom4j.DocumentHelper;
//import org.dom4j.Element;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.IOException;
//import java.util.*;
//import static net.seocoo.smartbus.core.util.AppPayUtil.creatReqSeq;
//
///**
// * WEB端支付工具类
// * @author TangWenBo
// * @date 2019-05-08 17:57
// **/
//public class WebPayUtil {
//
//    /**
//     * 构建微信手机网站支付的预支付订单
//     * @param openid, wapPath, request
//     * @return PayUnitedResponse
//     * @date 2019/5/8 19:39
//     */
//    public static PayUnitedResponse buildPrePayment(String openid, HttpServletRequest request) {
//        String amount = request.getParameter("amount");
//        String appid = PayConstant.publicAppId;
//        String payPaternerKey = PayConstant.publicAppKey;
//        String  payPartner = PayConstant.publicMchId;
//
//        // 创建请求对象
//        PayUnitedRequest payUnitedRequest = new PayUnitedRequest();
//        payUnitedRequest.setAppid(appid);
//        payUnitedRequest.setMch_id(payPartner);
//        payUnitedRequest.setNonce_str(creatReqSeq());
//        payUnitedRequest.setBody("商城购物");
//        payUnitedRequest.setAttach("");
//        payUnitedRequest.setOut_trade_no(RandomUtil.randomStringFixLength(15));
//        payUnitedRequest.setTotal_fee(amount);
//        payUnitedRequest.setDevice_info("001");
//
//        //获取当前用户的ip
//        String ip= AppPayUtil.getIpAddr(request);
//        payUnitedRequest.setSpbill_create_ip(ip);
//        payUnitedRequest.setTime_start(DateUtils.toString(new Date(),"yyyyMMddHHmmss"));
//        int offset = 1;
//        String time_expire = DateUtils.formatDateDefault(DateUtils.getOffsetDate(offset), "yyyyMMddHHmmss");
//        payUnitedRequest.setTime_expire(time_expire);
//        String  order_notice_url = PayConstant.servicePath + "/wechat/wechatCallback";
//        payUnitedRequest.setNotify_url(order_notice_url);
//        payUnitedRequest.setTrade_type("JSAPI");
//        payUnitedRequest.setOpenid(openid);
//
//        // 转成map
//        Map<String, String> param = new HashMap<String, String>();
//        try {
//            param = ReflectionUtils.convertBean2Map(payUnitedRequest);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        // 去除空串
//        Map<String, String> array = MicroPayCore.paraFilter(param);
//        String sign = MicroPayCore.buildMysign(array, payPaternerKey).toUpperCase();
//        param.put("sign", sign);
//        String bodyContent = buildWeiXinRequest(param);
//        PayUnitedResponse payUnitedResponse = null;
//        try {
//            String url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
//            String respStr = HttpClientUtil.doPost(url, bodyContent);
//            payUnitedResponse = xmlToPayUnitedResponse(respStr);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        // 发起支付请求
//        return payUnitedResponse;
//    }
//
//
//    /**
//     * 解析调用统一支付接口响应报文
//     * @param msg
//     * @return PayUnitedResponse
//     * @date 2019/5/8 19:10
//     */
//    public static PayUnitedResponse xmlToPayUnitedResponse(String msg) {
//        PayUnitedResponse payUnitedResponse = new PayUnitedResponse();
//        Document doc = null;
//        try {
//            doc = DocumentHelper.parseText(msg);
//        } catch (DocumentException e) {
//            e.printStackTrace();
//        }
//        Element root = doc.getRootElement();
//        String return_code = root.element("return_code").getTextTrim();
//        if ("SUCCESS".equals(return_code)) {
//            String result_code = root.element("result_code").getTextTrim();
//            if ("SUCCESS".equals(result_code)) {
//                String appid = root.element("appid").getTextTrim();
//                String mch_id = root.element("mch_id").getTextTrim();
//                String nonce_str = root.element("nonce_str").getTextTrim();
//                String sign = root.element("sign").getTextTrim();
//                String trade_type = root.element("trade_type").getTextTrim();
//                String prepay_id = root.element("prepay_id").getTextTrim();
//                payUnitedResponse.setAppid(appid);
//                payUnitedResponse.setMch_id(mch_id);
//                payUnitedResponse.setNonce_str(nonce_str);
//                payUnitedResponse.setReturn_code(return_code);
//                payUnitedResponse.setReturn_code(result_code);
//                payUnitedResponse.setSign(sign);
//                payUnitedResponse.setTrade_type(trade_type);
//                payUnitedResponse.setPrepay_id(prepay_id);
//            } else {
//                String err_code = root.element("err_code").getTextTrim();
//                String err_code_desc = root.element("err_code_des").getTextTrim();
//                payUnitedResponse.setReturn_msg(err_code_desc);
//            }
//        } else {
//            // 协议错误
//            String return_msg = root.element("return_msg").getTextTrim();
//            payUnitedResponse.setReturn_msg(return_msg);
//        }
//        return payUnitedResponse;
//    }
//
//
//
//    /**
//     * 构建paysign
//     * @param payPaternerKey, packageMsg, appId, timeStamp, appkey, nonceStr, signType
//     * @return java.lang.String
//     * @date 2019/5/8 19:16
//     */
//    private static  String paySign(String payPaternerKey,String packageMsg, String appId, String timeStamp,
//                                   String appkey, String nonceStr, String signType) {
//        Map<String, String> param = new HashMap<>();
//        param.put("appId", appId);
//        param.put("timeStamp", timeStamp);
//        param.put("nonceStr", nonceStr);
//        param.put("package", packageMsg);
//        param.put("signType", signType);
//        // 去除空串
//        Map<String, String> array = MicroPayCore.paraFilter(param);
//        String sign = MicroPayCore.buildMysign(array, payPaternerKey);
//        return sign;
//    }
//
//
//
//    /**
//     * 构建预支付请求
//     * @param param
//     * @return java.lang.String
//     * @date 2019/5/8 19:16
//     */
//    public static String buildWeiXinRequest(Map<String, String> param) {
//        StringBuffer sb = new StringBuffer();
//        sb.append("<xml>");
//        sb.append("<appid>" + param.get("appid") + "</appid>");
//        sb.append("<mch_id>" + param.get("mch_id") + "</mch_id>");
//        sb.append("<device_info>" + param.get("device_info") + "</device_info>");
//        sb.append("<nonce_str>" + param.get("nonce_str") + "</nonce_str>");
//        sb.append("<sign><![CDATA[" + param.get("sign") + "]]></sign>");
//        sb.append("<body><![CDATA[" + param.get("body") + "]]></body>");
//        sb.append("<attach><![CDATA[" + param.get("attach") + "]]></attach>");
//        sb.append("<out_trade_no>" + param.get("out_trade_no") + "</out_trade_no>");
//        sb.append("<total_fee>" + param.get("total_fee") + "</total_fee>");
//        sb.append("<spbill_create_ip>" + param.get("spbill_create_ip") + "</spbill_create_ip>");
//        sb.append("<time_start>" + param.get("time_start") + "</time_start>");
//        sb.append("<time_expire>" + param.get("time_expire") + "</time_expire>");
//        sb.append("<goods_tag></goods_tag>");
//        sb.append("<notify_url>" + param.get("notify_url") + "</notify_url>");
//        sb.append("<trade_type>JSAPI</trade_type>");
//        sb.append("<openid>" + param.get("openid") + "</openid>");
//        sb.append("<product_id></product_id>");
//        sb.append("</xml>");
//        return sb.toString();
//    }
//
//
//    /**
//     * 构建微信手机网站支付的页面请求
//     * @param payUnitedResponse
//     * @return SortedMap
//     * @date 2019/5/8 19:17
//     */
//    public static SortedMap<Object, Object> buildMsg(PayUnitedResponse payUnitedResponse) {
//        String appId = PayConstant.appId;
//        String appkey = PayConstant.publicAppKey;
//        String timeStamp = System.currentTimeMillis() + "";
//        String nonceStr = creatReqSeq();
//        String packageMsg = "prepay_id=" + payUnitedResponse.getPrepay_id();
//        String signType = "MD5";
//        String paySgin = paySign(appkey, packageMsg, appId, timeStamp, appkey, nonceStr, signType);
//
//        SortedMap<Object, Object> packageP = new TreeMap<>();
//        packageP.put("appId", appId);
//        packageP.put("nonceStr", nonceStr);
//        packageP.put("package", packageMsg);
//        packageP.put("signType", signType);
//        packageP.put("timeStamp", timeStamp);
//        packageP.put("paySign", paySgin);
//        packageP.put("orderNumber", "");
//        return packageP;
//    }
//
//    /**
//     * 获取openid
//     * @param code:授权码
//     * @return String
//     */
//    public static String getOpenId(String code) {
//        String appId = PayConstant.publicAppId;
//        String appSecret = PayConstant.appSecret;
//        String openid = "";
//
//        if (!"authdeny".equals(code)) {
//            WeixinOauth2Token wot = null;
//            if (code != null) {
//                wot = Oauth2Util.getOauth2AccessToken(appId, appSecret, code);
//                if (wot == null) {
//                    //code过期，
//                    return null;
//                }
//                openid = wot.getOpenId();
//            }
//        }
//        return openid;
//    }
//
//    /**
//     * 返回json格式的报文
//     * @param json 要返回的json报文
//     */
//    public static void sendMessages(String json, HttpServletResponse r) throws IOException {
//        r.setContentType("text/json; charset=utf-8");
//        r.setCharacterEncoding("UTF-8");
//        r.addHeader("random", UUID.randomUUID().toString());
//        r.getWriter().print(json);
//    }
//
//}
